_Pragma("once");

#include <string>

#include "BasePage.h"
#include "Log.h"
#include "common.h"

/**
* @author lizb
*/

template<class BASE>
class MultiPage : public BASE {

    using BASE::BASE;
public:
    /**
     * 页面增加的逻辑
     */
    void switchToNextPage() {
        doSetPageNo((1 + mmultiPageNo) % mpageSize);
        BASE::refreshPage();
    }



    void switchToPage(const int PageNo) {
        if (PageNo >= mpageSize) {
            LOG_ERROR("change2Page PageNo:%d not exist!", PageNo);
            return;
        }
        doSetPageNo(PageNo);
        BASE::refreshPage();
    }



    void beforeDisplay() override {
        BASE::beforeDisplay();
        mmultiPageNo = -1;
        doSetPageNo(0);
    }



    int onKeyEnt(const KeyCode& keyCode) override{
        int returnCode = 2;
        if (this->focus) {
            returnCode = BASE::onKeyEnt(keyCode);
        } else {
            switchToNextPage();//翻页
        }

        return returnCode;
    }

    int computePageItems(int elementSize) {
        int mod = elementSize % CONTENT_LINE_PER_PAGE;
        return mmultiPageNo != mpageSize - 1 || 0 == mod ?  CONTENT_LINE_PER_PAGE : mod;
    }


protected:
    virtual void doSetPageNo(const int nextPageNo){
        mprevPageNo = mmultiPageNo;
        mmultiPageNo = nextPageNo;
    }


    int mprevPageNo = -1;
    int mmultiPageNo = -1;//内嵌页面页码 从0开始
    int mpageSize = 1;
};


